// 路由鉴权
import router from '@/router'
// 引入进度条
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'
nprogress.configure({showSpinner: false}) // 关闭进度条小圆球
// 获取用户仓库 在组件外部引入仓库,必须先引入pinia
import pinia from './store'
import { useUserStore } from '@/store/modules/user'
const userStore = useUserStore(pinia)
// 全局前置守卫
router.beforeEach(async (to:any, from:any, next:any) => {
  nprogress.start()
  document.title = to.meta.title
  // 通过token判断登录还是未登录 // 获取用户名字
  const {token, username} = userStore
  // 只有刷新页面才会重新修改仓库中的token
  // 手动修改token,仓库中不会变,当刷新后,重新获取错误token且username被重置为'', 这时会去获取suerInfo()
  if(token) { 
    if(to.path == '/login') {
      // 登录后 Login不能访问, 且指向首页
      next({path: '/'})
    } else {
      // 其他的放行
      // 有用户信息
      if(username) {
        // 有用户信息,如果token过期了呢,401情况这里没有判断
        next()
      } else {
        // 如果没有用户信息,在守卫这里发请求获取到信息再放行
        try {
          await userStore.userInfo()
          // 万一刷新的时候是异步路由呢,有可能获取到了用户信息,但异步路由还没加载完
          // 如果退出登录 redirect去role 但新登录的用户没有role权限,会404
          // next({...to}) 保证加载完之后再放行
          next({...to})
        }catch(error) {
          // 获取用户信息失败,token过期 退出登录 清空信息
          await userStore.userLogout()
          next({path: '/login', query:{redirect: to.path}})
        }
      }
    }
  } else {
    // 未登录
    if(to.path == '/login') {
      // 如果跳转的是登录页面 直接放行
      next()
    } else {
      // 非login页面 跳转去登录页,且带登录前的页面路径
      next({path: '/login', query:{redirect: to.path}})
    }
  }


  // next()
})



// 全局后置守卫
router.afterEach((to:any, from:any, next:any) => {
  nprogress.done()
})






